990 OPEN1,4 995 SYS 9*4096 1000 .OPT OO,P1 1005 ; 1010 ;GRAFIKROUTINEN 'PROFI-GRAFIK 64' 1015 ; 1020 *= $8390 ;STARTADRESSE 1025 ; 1030 GETCOM = $AEFD ;PRUEFT AUF KOMMA 1035 GETBYTE = $B79E ;HOLT BYTE INS X-REGISTER 1040 GETADR = $B7EB ;ADRESSWERT NACH $14/$15 + GETBYTE 1045 CHRGET = $0073 ;HOLT NAECHSTES ZEICHEN 1050 CHR(null)T = $0079 ;HOLT LETZTES ZEICHEN 1055 ILLEGAL = $B248 ;FEHLERMELDUNG 'ILLEGAL QUANTITY' 1060 ; 1065 SCRNUM = $9FF1 ;AKTUELLE BILDSCHIRMNUMMER 1070 ; 1075 SCREEN JSR GETBYTE 1080 CPX #2 1085 BCC SCROK 1090 JMP ILLEGAL 1095 SCROK LDA SCRTAB,X 1100 STA SCRNUM ;MERKEN 1105 RTS 1110 ; 1115 SCRTAB .BYT $A0,$E0 1120 ; 1125 HIRES LDA $DD00 ;16K-BEREICH,DEN DER VIC ADRESSIERT 1130 AND #%11111100 ;FESTLEGEN $C000-$FFFF 1135 BIT SCRNUM 1140 BVS *+4 ;BEI $E0 IST DAS V-FLAG GESETZT ! 1145 ORA #%00000001 ;BEREICH VON $8000-$BFFF 1150 STA $DD00 1155 LDA $D018 ;POSITION DES VIDEORAMS 1160 ORA #%00101000 ;FESTLEGEN $0C00-$0FFF 1165 STA $D018 1170 JSR TEX1 1175 LDA $D011 ;EINZELPUNKTMODUS EINSCHALTEN 1180 ORA #%00100000 ;BIT5=1 1185 STA $D011 1190 RTS 1195 ; 1200 MULTI JSR HIRES ;HIRES-MODUS EIN 1205 LDA $D016 ;MULTICOLORMODUS EINSCHALTEN 1210 ORA #%00010000 ;BIT4=1 1215 STA $D016 1220 RTS 1225 ; 1230 TEXT LDA $DD00 ;VIC ADRESSIERT JETZT WIEDER 1235 ORA #%00000011 ;BEREICH VON $0000-$3FFF 1240 STA $DD00 1245 LDA $D018 ;VIDEORAM AB $0400-$07FF 1250 AND #%11010111 1255 STA $D018 1260 LDA $D011 ;EINZELPUNKTMODUS ABSCHALTEN 1265 AND #%11011111 1270 STA $D011 1275 TEX1 LDA $D016 ;MULTICOLORMODUS ABSCHALTEN 1280 AND #%11101111 1285 STA $D016 1290 RTS 1295 ; 1300 HELP = $20 ;HILFSZEIGER 1305 ; 1310 CLEAR LDA SCRNUM 1315 STA HELP+1 1320 LDA #0 1325 STA HELP ;ZEIGER AUF ANFANG DER BITMAP 1330 TAY 1335 LDX #32 ;32 BLOECKE = 8 KBYTE 1340 CLOOP STA (HELP),Y ;BYTE LOESCHEN 1345 INY 1350 BNE CLOOP 1355 INC HELP+1 ;NAECHSTER BLOCK 1360 DEX 1365 BNE CLOOP 1370 RTS 1375 ; 1380 HICOL JSR GETBYTE ;ZEICHENFARBE HOLEN 1385 STX HELP ;MERKEN 1390 JSR GETCOM 1395 JSR GETBYTE ;HINTERGRUNDFARBE 1400 STX HELP+1 ;MERKEN 1405 LDA HELP ;ZEICHENFARBE 1410 ASL A 1415 ASL A ;MAL 16 1420 ASL A 1425 ASL A 1430 CLC 1435 ADC HELP+1 ;+ HINTERGRUNDFARBE 1440 JSR HIC1 ;MIT DIESEM WERT VIDEORAM FUELLEN 1445 JSR CHR(null)T 1450 CMP #"," ;WENN NOCH EIN KOMMA FOLGT, 1455 BNE MODE-1 1460 JSR CHRGET 1465 JSR GETBYTE ;DANN 3.ZEICHENFARBE HOLEN 1470 TXA 1475 LDX #$D8 ;UND DAS FARBRAM ($D800-$DFFF) 1480 BNE HIC2 ;DAMIT FUELLEN 1485 ; 1490 HIC1 BIT SCRNUM 1495 BVS SCR1A 1500 LDX #$8C ;SCREEN0 VIDEORAM VON $8C00-$8FFF 1505 .BYT $2C ;BIT-OPCODE 1510 SCR1A LDX #$CC ;SCREEN1 VIDEORAM VON $CC00-$CFFF 1515 HIC2 STX HELP+1 1520 LDY #0 1525 STY HELP ;ZEIGER AUF ANFANG VIDEORAM 1530 LDX #4 ;4 BLOECKE SIND ZU FUELLEN 1535 HLOOP STA (HELP),Y 1540 INY 1545 BNE HLOOP 1550 INC HELP+1 ;NAECHSTER BLOCK 1555 DEX 1560 BNE HLOOP 1565 RTS 1570 ; 1575 PLOTMODE = $9FF2 ;AKTUELLER PLOTMODUS 1580 ; 1585 MODE JSR GETBYTE 1590 CPX #3 1595 BCC MODEOK 1600 ILLMODE JMP ILLEGAL 1605 MODEOK LDA MODETAB,X 1610 STA PLOTMODE ;MODUS MERKEN 1615 RTS 1620 ; 1625 MODETAB .BYT 0,64,128 1630 ; 1635 MULTICOL = $9FF3 ;ZEICHENFARBE FUER MULTI 1640 ; 1645 INK JSR GETBYTE ;ZEICHENFARBE SETZEN 1650 CPX #4 1655 BCS ILLMODE ;>=4, DANN FEHLER 1660 STX MULTICOL ;MERKEN 1665 RTS 1670 ; 1675 XLO = $14 1680 XHI = $15 1685 ; 1690 ;BYTENUMMER ERRECHNEN (HIRES-MODUS) 1695 HIPLOT LSR ;Y-KOORD. SCHON IM AKKU ! 1700 LSR ;(Y/8) 1705 LSR 1710 TAY ;INS Y-REGISTER 1715 CLC ;ALLE LOBYTES ADDIEREN 1720 TXA 1725 AND #%00000111 ;(Y AND #7) 1730 ADC MALTAB,Y ;+ (320*Y/8)LO (C=0!) 1735 STA $F7 1740 LDA XLO 1745 AND #%11111000 ;+ (XLO AND #248) 1750 ADC $F7 1755 STA $F7 ;NACH $F7 1760 ;ADDITION DER HIBYTES 1765 LDA MALTAB1,Y ;(320*Y/8)HI 1770 ADC SCRNUM ;+ ANFANG BITMAP 1775 ADC XHI ;+ XHI 1780 STA $F8 ;NACH $F8 1785 LDA XLO ;BITPOSITION ERRECHNEN 1790 AND #%00000111 ;(XLO AND #7) 1795 TAY 1800 LDA HOCHTAB,Y ;2^(7-YREGISTER) 1805 RTS 1810 ; 1815 MUPLOT LSR ;(Y/8) 1820 LSR 1825 LSR 1830 TAY 1835 LDA XLO 1840 AND #%11111100 ;(XLO AND #252) 1845 ASL ;MAL 2 (BIT7 INS CARRY !) 1850 STA $F7 ;NACH $F7 1855 LDA MALTAB1,Y ;(320*Y/8)HI 1860 ADC SCRNUM ;+ANFANG BITMAP 1865 STA $F8 ;NACH $F8 1870 TXA 1875 AND #%00000111 ;(Y AND #7) 1880 ADC MALTAB,Y ;+(320*Y/8)LO 1885 TAY ;INS Y-REGISTER 1890 LDA XLO ;BITPOSITION ERRECHNEN 1895 AND #%00000011 ;(XLO AND #3) 1900 TAX 1905 LDA MULTAB,X ;BITWERT LADEN 1910 SEC 1915 RTS 1920 ; 1925 PLOT JSR GETADR ;KOORDINATEN HOLEN 1930 LDA $D016 1935 AND #%00010000 1940 BNE MPLOT ;MULTICOLORMODUS 1945 CPX #200 1950 BCS PLOT-1 ;YKOORD.>199 (C=1) 1955 LDY XHI 1960 BEQ OK 1965 DEY 1970 BNE PLOT-2 ;XHI>1 (C=1) 1975 LDA XLO ;XHI=1, DANN XLO TESTEN 1980 CMP #<320 1985 BCS PLOT-1 ;XLO>$40 (C=1) 1990 OK SEI 1995 LDA #$34 ;SPEICHER AUF RAM UMSCHALTEN 2000 STA 1 ;UM BIT-MAP LESEN ZU KOENNEN 2005 TXA 2010 PHA ;Y-KOORD. MERKEN 2015 JSR HIPLOT ;BYTENUMMER BERECHNEN 2020 LDY #0 2025 BIT PLOTMODE 2030 BVS LOESCH 2035 BMI INVERT 2040 ORA ($F7),Y ;PUNKT SETZEN 2045 BNE STORE ;UNBEDINGTER SPRUNG 2050 ; 2055 MPLOT CPX #200 2060 BCS PLOT-1 2065 LDA XHI ;XHI<>0 (C=1) 2070 BNE PLOT-2 2075 LDA XLO 2080 CMP #160 2085 BCS PLOT-2 ;XLO>159 (C=1) 2090 SEI 2095 LDA #$34 ;SPEICHER AUF RAM UMSCHALTEN 2100 STA 1 2105 TXA 2110 PHA ;YKOORD. MERKEN 2115 JSR MUPLOT ;BYTENUMMER ERRECHNEN 2120 BIT PLOTMODE 2125 BVS LOESCH 2130 BMI INVERT 2135 PHA ;PUNKT SETZEN 2140 EOR #255 ;VORHER LOESCHEN 2145 AND ($F7),Y 2150 STA ($F7),Y 2155 LDX MULTICOL ;ZEICHENFARBE LADEN 2160 PLA 2165 AND MULTAB1,X ;BITMUSTER DER FARBE SETZEN 2170 ORA ($F7),Y 2175 BNE STORE 2180 LOESCH EOR #255 ;PUNKT LOESCHEN 2185 AND ($F7),Y 2190 .BYT $2C 2195 INVERT EOR ($F7),Y ;PUNKT INVERTIEREN 2200 STORE STA ($F7),Y ;BITMUSTER SETZEN 2205 PLA ;YKOORD. WIEDERHERSTELLEN 2210 TAX 2215 PLOTEND LDA #$37 ;NORMALE SPEICHERKONFIGURATION 2220 STA 1 2225 CLI 2230 CLC ;C=0 WENN PUNKT GESETZT 2235 RTS 2240 ; 2245 MALTAB .BYT 0,<320,<640,<960 ;MULTIPLIKATIONSTABELLE 2250 .BYT $00,$40,$80,$C0 ;MAL 320 2255 .BYT $00,$40,$80,$C0 ;LOBYTES 2260 .BYT $00,$40,$80,$C0 2265 .BYT $00,$40,$80,$C0 2270 .BYT $00,$40,$80,$C0 2275 .BYT $00 2280 ; 2285 MALTAB1 .BYT 0,>320,>640,>960 2290 .BYT $05,$06,$07,$08 ;MAL 320 2295 .BYT $0A,$0B,$0C,$0D ;HIBYTES 2300 .BYT $0F,$10,$11,$12 2305 .BYT $14,$15,$16,$17 2310 .BYT $19,$1A,$1B,$1C 2315 .BYT $1E 2320 ; 2325 HOCHTAB .BYT $80,$40,$20,$10 ;ZWEIERPOTENZEN 2330 .BYT $08,$04,$02,$01 2335 ; 2340 MULTAB .BYT %11000000 ;XPOSITION0 2345 .BYT %00110000 ;XPOSITION1 2350 .BYT %00001100 ;XPOSITION2 2355 .BYT %00000011 ;XPOSITION3 2360 ; 2365 MULTAB1 .BYT %00000000 ;FARBE0=HINTERGRUND 2370 .BYT %01010101 ;FARBE1 2375 .BYT %10101010 ;FARBE2 2380 .BYT %11111111 ;FARBE3